﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocio.entidades;
using negocio.readOnly;
using negocio.servicios;

namespace web.form
{
    public partial class Pedido : System.Web.UI.Page
    {
        ProductoService prodService = new ProductoService();
        PedidoService pedService = new PedidoService();
        DetallePedidoService dpService = new DetallePedidoService();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                cargarCombo();
                cmdAgregar.Enabled = false;
                pnlCantidad.Visible = false;
                pnlProductosPedir.Visible = false;
                cmdFiltrar.Enabled = false;
            }
        }

        private void cargarCombo()
        {
            ProveedorService prov = new ProveedorService();

            cmbProveedores.DataSource = prov.ObtenerTodo();
            cmbProveedores.DataValueField = "IdProveedor";
            cmbProveedores.DataTextField = "RazonSocial";
            cmbProveedores.DataBind();
            cmbProveedores.Items.Insert(0, " ");
        }

        private void CargarGrillaProductos(int idProv)
        {
            List<ProductoReadOnly> productos = prodService.FindAllReadOnliesProv(idProv);
            gvProductos.DataSource = productos;
            string[] keys = new string[1];
            keys[0] = "ID";
            gvProductos.DataKeyNames = keys;
            gvProductos.DataBind();

        }

        //private void CargarGrillaPedidos(int idProv)
        //{
        //    List<ProductoReadOnly> productos = prodService.FindAllReadOnlies(idProv);
        //    gvProductosAPedir.DataSource = productos;
        //    string[] keys = new string[1];
        //    keys[0] = "ID";
        //    gvProductosAPedir.DataKeyNames = keys;
        //    gvProductosAPedir.DataBind();
        //}


        protected void cmbProveedores_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarGrillaProductos(Convert.ToInt32(cmbProveedores.SelectedValue));
            pnlCantidad.Visible = true;
            cmdFiltrar.Enabled = true;
        }

        protected void cmdFiltrar_Click(object sender, EventArgs e)
        {
            string filtro = txtCodigoFiltro.Text;
            int idProv = Convert.ToInt32(cmbProveedores.SelectedValue);
            if (filtro == "")
            {
                CargarGrillaProductos(Convert.ToInt32(cmbProveedores.SelectedValue));
            }
            else
            {
                List<ProductoReadOnly> productos = prodService.buscarPorFiltroYProv(filtro, idProv);
                gvProductos.DataSource = productos;
                string[] keys = new string[1];
                keys[0] = "ID";
                gvProductos.DataKeyNames = keys;
                gvProductos.DataBind();
                txtCodigoFiltro.Text = "";
            }

        }

        protected List<object> cargarLista()
        {
            List<object> lista = new List<object>();
            for (int i = 0; i < gvProductosAPedir.Rows.Count; i++)
            {
                ProductoService prodService = new ProductoService();
                Producto p = prodService.ontenerProductoPorId(int.Parse(gvProductosAPedir.Rows[i].Cells[0].Text));
                var prod = new { id = p.Id, codigo = p.Codigo, cantidad = int.Parse(gvProductosAPedir.Rows[i].Cells[2].Text), tipoProd = p.TipoProd, descripcion = p.Descripcion };
                lista.Add(prod);
            }

            return lista;
        }

        private bool existeGrilla(int id)
        {
            bool resp = false;
            for (int i = 0; i < gvProductosAPedir.Rows.Count; i++)
            {

                if (int.Parse(gvProductosAPedir.Rows[i].Cells[0].Text) == id)
                {
                    resp = true;
                }
            }
            return resp;
        }

        protected void gvProductos_SelectedIndexChanged(object sender, EventArgs e)
        {
            ProductoService prodServ = new ProductoService();
            Producto p = prodServ.ontenerProductoPorId(int.Parse(gvProductos.SelectedValue.ToString()));
            cmdAgregar.Enabled = true;
            cmbProveedores.Enabled = false;
            lblMensaje.Text = "";
        }

        protected void cmdAgregar_Click(object sender, EventArgs e)
        {
            if (txtCantidad.Text == "")
            {
                lblMensaje.Text = "*Ingrese cantidad.";
            }
            else
            {
                //NO ANDA, TENGO Q TOMAR EL ID, DEL PRODUCTO SELECCIONADO
                //int valor = int.Parse(gvProductos.SelectedRow.ID);
                //int valor = int.Parse(gvProductos.SelectedDataKey);
                //if (existeGrilla(valor) == false)
                //{
                ProductoService prodServ = new ProductoService();
                Producto p = prodServ.ontenerProductoPorId(int.Parse(gvProductos.SelectedValue.ToString()));
                List<object> lista = new List<object>();
                lista = cargarLista();

                var prod = new { id = p.Id, codigo = p.Codigo, cantidad = int.Parse(txtCantidad.Text), tipoProd = p.TipoProd, descripcion = p.Descripcion };
                
                bool exist = Existe(int.Parse(gvProductos.SelectedValue.ToString()));

                if (exist == true)
                {
                    lblMensaje.Text = "*El producto que desea ingresar, ya se encuentra en el pedido.";
                    txtCantidad.Text = "";
                    gvProductos.EditIndex = -1;
                }
                else
                {
                    lista.Add(prod);
                    gvProductosAPedir.DataSource = lista;
                    string[] keys = new string[1];
                    keys[0] = "ID";
                    gvProductos.DataKeyNames = keys;
                    gvProductosAPedir.DataKeyNames = keys;
                    gvProductosAPedir.DataBind();
                    cmbProveedores.Enabled = true;
                    
                }
                
                txtCantidad.Text = "";
                gvProductos.EditIndex = -1;
                pnlProductosPedir.Visible = true;
                

                
                //}

            }

        }

        private bool Existe(int id)
        {
            bool existe = false;

            for (int i = 0; i < gvProductosAPedir.Rows.Count; i++)
            {
                int IdProducto = int.Parse(gvProductosAPedir.Rows[i].Cells[0].Text);
                int key = id;
                if (IdProducto == key)
                {
                    existe = true;
                }
            }

            return existe;
        }

        protected void gvProductosAPedir_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvProductosAPedir.DeleteRow(gvProductosAPedir.SelectedIndex);
        }



        protected void gvProductosAPedir_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int fila = gvProductosAPedir.SelectedIndex;
            gvProductosAPedir.DeleteRow(fila);
        }

        protected void cmdRefrescarLista_Click(object sender, EventArgs e)
        {
            string filtro = txtCodigoFiltro.Text;
            int idProv = Convert.ToInt32(cmbProveedores.SelectedValue);
            if (filtro == "")
            {
                CargarGrillaProductos(Convert.ToInt32(cmbProveedores.SelectedValue));
            }
            else
            {
                List<ProductoReadOnly> productos = prodService.buscarPorFiltroYProv(filtro, idProv);
                gvProductos.DataSource = productos;
                string[] keys = new string[1];
                keys[0] = "ID";
                gvProductos.DataKeyNames = keys;
                gvProductos.DataBind();
            }
        }

        protected void cmdPedir_Click(object sender, EventArgs e)
        {
            negocio.entidades.Pedido p = new negocio.entidades.Pedido();

            p.IdProveedor = int.Parse(cmbProveedores.SelectedValue);
            p.IdEstadoPedido = 1;
            p.FechaAlta = DateTime.Parse(DateTime.Today.ToShortDateString());
            p.ListaDetalles = mapearDetalle();
            pedService.Insertar(p);

            cmbProveedores.SelectedIndex = 0;
            gvProductos.DataSource = null;
            gvProductos.DataBind();
            gvProductosAPedir.DataSource = null;
            gvProductosAPedir.DataBind();
            cmdFiltrar.Enabled = false;
            pnlProductosPedir.Visible = false;
        }

        private List<DetallePedido> mapearDetalle()
        {
            int idProd;
            int cant;
            int idPedido = pedService.maximoIdPedido();
            List<DetallePedido> lista = new List<DetallePedido>();
            for (int i = 0; i < gvProductosAPedir.Rows.Count; i++)
            {
                DetallePedido dp = new DetallePedido();
                dp.IdProducto = int.Parse(gvProductosAPedir.Rows[i].Cells[0].Text);
                dp.Cantidad = int.Parse(gvProductosAPedir.Rows[i].Cells[2].Text);
                dp.IdPedido = idPedido;
                lista.Add(dp);
            }
            return lista;
        }


    }
}